count.ts 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. import { paths } from 'api-types'
  2. import { NextApiRequest, NextApiResponse } from 'next'
  3. import apiWrapper from '@/lib/api/apiWrapper'
  4. import { getSnippets } from '@/lib/api/snippets.utils'
  5. const wrappedHandler = (req: NextApiRequest, res: NextApiResponse) => apiWrapper(req, res, handler)
  6. async function handler(req: NextApiRequest, res: NextApiResponse) {
  7. const { method } = req
  8. switch (method) {
  9. case 'GET':
  10. return handleGetAll(req, res)
  11. default:
  12. res.setHeader('Allow', ['GET'])
  13. res.status(405).json({ data: null, error: { message: `Method ${method} Not Allowed` } })
  14. }
  15. }
  16. type GetRequestData = paths['/platform/projects/{ref}/content/count']['get']['parameters']['query']
  17. const handleGetAll = async (req: NextApiRequest, res: NextApiResponse) => {
  18. const params = req.query as GetRequestData
  19. try {
  20. const { snippets } = await getSnippets({
  21. searchTerm: params?.name,
  22. })
  23. if (params?.name) {
  24. return res.status(200).json({
  25. count: snippets.length,
  26. })
  27. } else {
  28. return res.status(200).json({
  29. shared: snippets.filter((s) => s.visibility === 'project').length,
  30. favorites: snippets.filter((s) => s.favorite).length,
  31. private: snippets.filter((s) => s.visibility === 'user').length,
  32. })
  33. }
  34. } catch (error: any) {
  35. console.error('Error fetching snippets:', error)
  36. return res.status(500).json({ message: error?.message ?? 'Failed to get count' })
  37. }
  38. }
  39. export default wrappedHandler